// any类型
var an;
an = 1;
an = "hello"; // 不建议使用
var bn;
bn = 1;
bn = "hello";
var bbn;
bbn = bn; // any 可以赋值给任何类型的变量
// unknown 类型
var cn;
cn = 1;
cn = "hello";
cn = true;
var cnn;
// cnn = cn; //Type 'unknown' is not assignable to type 'string'.
// r若强制赋值，需要进行类型检查或者进行类型断言
cn = "hello";
if (typeof cn === "string") {
    cnn = cn;
}
console.log("cnn ", cnn);
var dn;
dn = 12345;
var dnn = dn;
var dnnn = dn;
console.log("dnn===" + dnn + ",dnnn===" + dnnn);
// 对象类型
var obj;
obj = { name: "张三" };
obj = { name: "李四", age: 18 };
console.log("obj", obj);
// propName 表示任意类型属性
var cbj;
cbj = { name: "cbj", age: 20 };
cbj = { name: "ccbj", sex: "男" };
console.log("cbj", cbj);
// 函数类型
var fun;
fun = function (a, b) {
    return a + b;
};
// & 表示连接 |表示或者
var j;
j = { name: "", age: 123 };
var k;
var l;
var m;
k = 1;
l = 2;
m = 3;
console.log("klm", k, l, m);
// 数组类型 两种表达方式
var arr = [1, 2, 3];
var array = [1, 2, 345];
// 元组类型 长度和类型固定
var yuanArr;
yuanArr = ["hello", 1, 2];
// 枚举类型
var Color;
(function (Color) {
    Color[Color["Red"] = 0] = "Red";
    Color[Color["Green"] = 1] = "Green";
    Color[Color["Blue"] = 2] = "Blue";
})(Color || (Color = {}));
var c = Color.Blue;
console.log(c); // 输出 2
var Gender;
(function (Gender) {
    Gender[Gender["male"] = 0] = "male";
    Gender[Gender["female"] = 1] = "female";
})(Gender || (Gender = {}));
var i;
i = { name: "张三", gender: Gender.male };
console.log("i的gender", i.gender === Gender.male);
var getValue = function () {
    return 0;
};
//  A 的值是被计算出来的。注意注释部分，如果某个属性的值是计算出来的，那么它后面一位的成员必须要初始化值。
var List;
(function (List) {
    List[List["A"] = getValue()] = "A";
    List[List["B"] = 2] = "B";
    List[List["C"] = 3] = "C";
})(List || (List = {}));
console.log(List.A); // 0
console.log(List.B); // 2s
console.log(List.C); // 3
function log(str) {
    console.log("hello typeScript");
}
// never 是其它类型（包括 null 和 undefined）的子类型，代表从不会出现的值。这意味着声明为 never 类型的变量只能被 never 类型所赋值，在函数中它通常表现为抛出异常或无法执行到终止点（例如无限循环）
var a;
// a = 123 报错
function err(params) {
    throw new Error("错误类型");
}
a = err("123");
console.log(a);
